﻿using System;
using System.Runtime.InteropServices;
using HuaWeiCamera.Enums;
using HuaWeiCamera.Enums.Media;
using HuaWeiCamera.Enums.Video;

namespace HuaWeiCamera.Struct
{
    /// <summary>
    /// 视频实时预览结构体
    /// </summary>
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    public struct PU_REAL_PLAY_INFO_S
    {
        /// <summary>
        /// 设备通道号，一般为101。
        /// </summary>
        public uint ulChannelId;
        /// <summary>
        /// 播放窗口句柄,为NULL表示用户自己处理视频数据流，不自动播放视频流
        /// </summary>
        public IntPtr hPlayWnd;
        /// <summary>
        /// 码流类型,主码流、子码
        /// </summary>
        public PU_STREAM_TYPE enStreamType;
        /// <summary>
        /// 流类型：视频流、音频流、复合流、录 像流、元数据
        /// </summary>
        public PU_VIDEO_TYPE enVideoType;
        /// <summary>
        /// 传输协议类型，UDP,TCP
        /// </summary>
        public PU_PROTOCOL_TYPE enProtocolType;
        /// <summary>
        /// 回调类型：0:RTP解密1:RTP不解密 2:Frame 3:YUV
        /// </summary>
        public PU_MEDIA_CALLBACK_TYPE enMediaCallbackType;
        /// <summary>
        /// 请求端IP，第三方平台可以不填，SDK会 自动获取
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
        public string szLocalIp;
        /// <summary>
        /// 是否保活
        /// </summary>
        public bool bKeepLive;
        /// <summary>
        /// 请求预录、录像开始时间（本地时 间）。 
        /// </summary>
        public PU_TIME_S stStartTime;//请求预录、录像开始时间
        /// <summary>
        /// 请求预录、录像结束时间（本地时 间）。 
        /// </summary>
        public PU_TIME_S stEndTime;//请求预录、录像结束时间
        /// <summary>
        /// 加密类型，只支持AES加密。
        /// </summary>
        public PU_MEDIA_CRYPTO_TYPE enMediaCryptoType;
        /// <summary>
        /// 加密密钥
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 44)]
        public string szMediaCrypto;
        /// <summary>
        /// szReserved[0-15]表示组播IP地址
        /// szReserved[16-19]表示组播端口
        /// szReserved[22]表示智能分析数据打包 格式 0:XML,1:元数据
        /// szReserved[23]表示元数据请求类型，取值参考枚举 PU_METADATA_REQUEST_TYPE_E定义
        /// </summary>
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public byte[] szReserved;
    }
}
